home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / pth.h < prev    next >
Encoding:
C/C++ Source or Header  |  2007-03-15  |  21.3 KB  |  589 lines

  1. /*
  2. **  GNU Pth - The GNU Portable Threads
  3. **  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
  4. **
  5. **  This file is part of GNU Pth, a non-preemptive thread scheduling
  6. **  library which can be found at http://www.gnu.org/software/pth/.
  7. **
  8. **  This library is free software; you can redistribute it and/or
  9. **  modify it under the terms of the GNU Lesser General Public
  10. **  License as published by the Free Software Foundation; either
  11. **  version 2.1 of the License, or (at your option) any later version.
  12. **
  13. **  This library is distributed in the hope that it will be useful,
  14. **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  16. **  Lesser General Public License for more details.
  17. **
  18. **  You should have received a copy of the GNU Lesser General Public
  19. **  License along with this library; if not, write to the Free Software
  20. **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  21. **  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
  22. **
  23. **  pth.h: Pth public API definitions
  24. */
  25.                              /* ``What you see is all you get.''
  26.                                           -- Brian Kernighan      */
  27. #ifndef _PTH_H_
  28. #define _PTH_H_
  29.  
  30.     /* the library version */
  31. #ifndef PTH_VERSION_STR
  32. #define PTH_VERSION_STR "2.0.7 (08-Jun-2006)"
  33. #endif
  34. #ifndef PTH_VERSION_HEX
  35. #define PTH_VERSION_HEX 0x200207
  36. #endif
  37. #ifndef PTH_VERSION
  38. #define PTH_VERSION PTH_VERSION_HEX
  39. #endif
  40.  
  41.     /* essential headers */
  42. #include <sys/types.h>     /* for ssize_t, off_t  */
  43. #include <time.h>          /* for struct timespec */
  44. #include <sys/time.h>      /* for struct timeval  */
  45. #include <sys/socket.h>    /* for sockaddr        */
  46. #include <sys/signal.h>    /* for sigset_t        */
  47. #include <sys/select.h>
  48.  
  49.     /* fallbacks for essential typedefs */
  50. #ifndef _PTHREAD_PRIVATE
  51. /* typedef int pid_t; */
  52. /* typedef unsigned int size_t; */
  53. /* typedef unsigned int ssize_t; */
  54. /* typedef socklen_t socklen_t; */
  55. /* typedef int off_t; */
  56. /* typedef int sig_atomic_t; */
  57. /* typedef nfds_t nfds_t; */
  58. #endif /* !_PTHREAD_PRIVATE */
  59.  
  60.     /* extra structure definitions */
  61. struct timeval;
  62. struct timespec;
  63.  
  64.     /* essential values */
  65. #ifndef FALSE
  66. #define FALSE (0)
  67. #endif
  68. #ifndef TRUE
  69. #define TRUE (!FALSE)
  70. #endif
  71. #ifndef NUL
  72. #define NUL '\0'
  73. #endif
  74. #ifndef NULL
  75. #define NULL (void *)0
  76. #endif
  77.  
  78.     /* bitmask generation */
  79. #define _BIT(n) (1<<(n))
  80.  
  81.     /* C++ support */
  82. #ifdef __cplusplus
  83. #define BEGIN_DECLARATION extern "C" {
  84. #define END_DECLARATION   }
  85. #else
  86. #define BEGIN_DECLARATION /*nop*/
  87. #define END_DECLARATION   /*nop*/
  88. #endif
  89.  
  90.     /* check if the user requests a bigger FD_SETSIZE than we can handle */
  91. #if defined(FD_SETSIZE)
  92. #if FD_SETSIZE > 1024
  93. #error "FD_SETSIZE is larger than what GNU Pth can handle."
  94. #endif
  95. #endif
  96.  
  97. BEGIN_DECLARATION
  98.  
  99.     /* some global constants */
  100. #define PTH_KEY_MAX                  256
  101. #define PTH_ATFORK_MAX               128
  102. #define PTH_DESTRUCTOR_ITERATIONS    4
  103.  
  104.     /* system call mapping support type (soft variant can be overridden) */
  105. #define PTH_SYSCALL_HARD 0
  106. #ifndef PTH_SYSCALL_SOFT
  107. #define PTH_SYSCALL_SOFT 0
  108. #endif
  109.  
  110.     /* queries for pth_ctrl() */
  111. #define PTH_CTRL_GETAVLOAD            _BIT(1)
  112. #define PTH_CTRL_GETPRIO              _BIT(2)
  113. #define PTH_CTRL_GETNAME              _BIT(3)
  114. #define PTH_CTRL_GETTHREADS_NEW       _BIT(4)
  115. #define PTH_CTRL_GETTHREADS_READY     _BIT(5)
  116. #define PTH_CTRL_GETTHREADS_RUNNING   _BIT(6)
  117. #define PTH_CTRL_GETTHREADS_WAITING   _BIT(7)
  118. #define PTH_CTRL_GETTHREADS_SUSPENDED _BIT(8)
  119. #define PTH_CTRL_GETTHREADS_DEAD      _BIT(9)
  120. #define PTH_CTRL_GETTHREADS           (PTH_CTRL_GETTHREADS_NEW|\
  121.                                        PTH_CTRL_GETTHREADS_READY|\
  122.                                        PTH_CTRL_GETTHREADS_RUNNING|\
  123.                                        PTH_CTRL_GETTHREADS_WAITING|\
  124.                                        PTH_CTRL_GETTHREADS_SUSPENDED|\
  125.                                        PTH_CTRL_GETTHREADS_DEAD)
  126. #define PTH_CTRL_DUMPSTATE            _BIT(10)
  127. #define PTH_CTRL_FAVOURNEW            _BIT(11)
  128.  
  129.     /* the time value structure */
  130. typedef struct timeval pth_time_t;
  131.  
  132.     /* the unique thread id/handle */
  133. typedef struct pth_st *pth_t;
  134. struct pth_st;
  135.  
  136.     /* thread states */
  137. typedef enum pth_state_en {
  138.     PTH_STATE_SCHEDULER = 0,         /* the special scheduler thread only       */
  139.     PTH_STATE_NEW,                   /* spawned, but still not dispatched       */
  140.     PTH_STATE_READY,                 /* ready, waiting to be dispatched         */
  141.     PTH_STATE_WAITING,               /* suspended, waiting until event occurred */
  142.     PTH_STATE_DEAD                   /* terminated, waiting to be joined        */
  143. } pth_state_t;
  144.  
  145.     /* thread priority values */
  146. #define PTH_PRIO_MAX                 +5
  147. #define PTH_PRIO_STD                  0
  148. #define PTH_PRIO_MIN                 -5
  149.  
  150.     /* the thread attribute structure */
  151. typedef struct pth_attr_st *pth_attr_t;
  152. struct pth_attr_st;
  153.  
  154.     /* attribute set/get commands for pth_attr_{get,set}() */
  155. enum {
  156.     PTH_ATTR_PRIO,           /* RW [int]               priority of thread                */
  157.     PTH_ATTR_NAME,           /* RW [char *]            name of thread                    */
  158.     PTH_ATTR_JOINABLE,       /* RW [int]               thread detachment type            */
  159.     PTH_ATTR_CANCEL_STATE,   /* RW [unsigned int]      thread cancellation state         */
  160.     PTH_ATTR_STACK_SIZE,     /* RW [unsigned int]      stack size                        */
  161.     PTH_ATTR_STACK_ADDR,     /* RW [char *]            stack lower address               */
  162.     PTH_ATTR_DISPATCHES,     /* RO [int]               total number of thread dispatches */
  163.     PTH_ATTR_TIME_SPAWN,     /* RO [pth_time_t]        time thread was spawned           */
  164.     PTH_ATTR_TIME_LAST,      /* RO [pth_time_t]        time thread was last dispatched   */
  165.     PTH_ATTR_TIME_RAN,       /* RO [pth_time_t]        time thread was running           */
  166.     PTH_ATTR_START_FUNC,     /* RO [void *(*)(void *)] thread start function             */
  167.     PTH_ATTR_START_ARG,      /* RO [void *]            thread start argument             */
  168.     PTH_ATTR_STATE,          /* RO [pth_state_t]       scheduling state                  */
  169.     PTH_ATTR_EVENTS,         /* RO [pth_event_t]       events the thread is waiting for  */
  170.     PTH_ATTR_BOUND           /* RO [int]               whether object is bound to thread */
  171. };
  172.  
  173.     /* default thread attribute */
  174. #define PTH_ATTR_DEFAULT (pth_attr_t)(0)
  175.  
  176.     /* the event structure */
  177. typedef struct pth_event_st *pth_event_t;
  178. struct pth_event_st;
  179.  
  180.     /* event subject classes */
  181. #define PTH_EVENT_FD                 _BIT(1)
  182. #define PTH_EVENT_SELECT             _BIT(2)
  183. #define PTH_EVENT_SIGS               _BIT(3)
  184. #define PTH_EVENT_TIME               _BIT(4)
  185. #define PTH_EVENT_MSG                _BIT(5)
  186. #define PTH_EVENT_MUTEX              _BIT(6)
  187. #define PTH_EVENT_COND               _BIT(7)
  188. #define PTH_EVENT_TID                _BIT(8)
  189. #define PTH_EVENT_FUNC               _BIT(9)
  190.  
  191.     /* event occurange restrictions */
  192. #define PTH_UNTIL_OCCURRED           _BIT(11)
  193. #define PTH_UNTIL_FD_READABLE        _BIT(12)
  194. #define PTH_UNTIL_FD_WRITEABLE       _BIT(13)
  195. #define PTH_UNTIL_FD_EXCEPTION       _BIT(14)
  196. #define PTH_UNTIL_TID_NEW            _BIT(15)
  197. #define PTH_UNTIL_TID_READY          _BIT(16)
  198. #define PTH_UNTIL_TID_WAITING        _BIT(17)
  199. #define PTH_UNTIL_TID_DEAD           _BIT(18)
  200.  
  201.     /* event structure handling modes */
  202. #define PTH_MODE_REUSE               _BIT(20)
  203. #define PTH_MODE_CHAIN               _BIT(21)
  204. #define PTH_MODE_STATIC              _BIT(22)
  205.  
  206.     /* event deallocation types */
  207. enum { PTH_FREE_THIS, PTH_FREE_ALL };
  208.  
  209.     /* event walking directions */
  210. #define PTH_WALK_NEXT                _BIT(1)
  211. #define PTH_WALK_PREV                _BIT(2)
  212.  
  213.     /* event status codes */
  214. typedef enum {
  215.     PTH_STATUS_PENDING,
  216.     PTH_STATUS_OCCURRED,
  217.     PTH_STATUS_FAILED
  218. } pth_status_t;
  219.  
  220.     /* the key type and init value */
  221. typedef int pth_key_t;
  222. #define PTH_KEY_INIT (-1)
  223.  
  224.     /* the once structure and init value */
  225. typedef int pth_once_t;
  226. #define PTH_ONCE_INIT FALSE
  227.  
  228.     /* general ring structure */
  229. typedef struct pth_ringnode_st pth_ringnode_t;
  230. struct pth_ringnode_st {
  231.     pth_ringnode_t *rn_next;
  232.     pth_ringnode_t *rn_prev;
  233. };
  234. typedef struct pth_ring_st pth_ring_t;
  235. struct pth_ring_st {
  236.     pth_ringnode_t *r_hook;
  237.     unsigned int    r_nodes;
  238. };
  239. #define PTH_RING_INIT { NULL }
  240.  
  241.     /* cancellation values */
  242. #define PTH_CANCEL_ENABLE            _BIT(0)
  243. #define PTH_CANCEL_DISABLE           _BIT(1)
  244. #define PTH_CANCEL_ASYNCHRONOUS      _BIT(2)
  245. #define PTH_CANCEL_DEFERRED          _BIT(3)
  246. #define PTH_CANCEL_DEFAULT           (PTH_CANCEL_ENABLE|PTH_CANCEL_DEFERRED)
  247. #define PTH_CANCELED                 ((void *)-1)
  248.  
  249.    /* mutex values */
  250. #define PTH_MUTEX_INITIALIZED        _BIT(0)
  251. #define PTH_MUTEX_LOCKED             _BIT(1)
  252. #define PTH_MUTEX_INIT               { {NULL, NULL}, PTH_MUTEX_INITIALIZED, NULL, 0 }
  253.  
  254.    /* read-write lock values */
  255. enum { PTH_RWLOCK_RD, PTH_RWLOCK_RW };
  256. #define PTH_RWLOCK_INITIALIZED       _BIT(0)
  257. #define PTH_RWLOCK_INIT              { PTH_RWLOCK_INITIALIZED, PTH_RWLOCK_RD, 0, \
  258.                                        PTH_MUTEX_INIT, PTH_MUTEX_INIT }
  259.  
  260.    /* condition variable values */
  261. #define PTH_COND_INITIALIZED         _BIT(0)
  262. #define PTH_COND_SIGNALED            _BIT(1)
  263. #define PTH_COND_BROADCAST           _BIT(2)
  264. #define PTH_COND_HANDLED             _BIT(3)
  265. #define PTH_COND_INIT                { PTH_COND_INITIALIZED, 0 }
  266.  
  267.    /* barrier variable values */
  268. #define PTH_BARRIER_INITIALIZED      _BIT(0)
  269. #define PTH_BARRIER_INIT(threshold)  { PTH_BARRIER_INITIALIZED, \
  270.                                        (threshold), (threshold), FALSE, \
  271.                                        PTH_COND_INIT, PTH_MUTEX_INIT }
  272. #define PTH_BARRIER_HEADLIGHT        (-1)
  273. #define PTH_BARRIER_TAILLIGHT        (-2)
  274.  
  275.     /* the message port structure */
  276. typedef struct pth_msgport_st *pth_msgport_t;
  277. struct pth_msgport_st;
  278.  
  279.     /* the message structure */
  280. typedef struct pth_message_st pth_message_t;
  281. struct pth_message_st { /* not hidden to allow inclusion */
  282.     pth_ringnode_t m_node;
  283.     pth_msgport_t  m_replyport;
  284.     unsigned int   m_size;
  285.     void          *m_data;
  286. };
  287.  
  288.     /* the mutex structure */
  289. typedef struct pth_mutex_st pth_mutex_t;
  290. struct pth_mutex_st { /* not hidden to avoid destructor */
  291.     pth_ringnode_t mx_node;
  292.     int            mx_state;
  293.     pth_t          mx_owner;
  294.     unsigned long  mx_count;
  295. };
  296.  
  297.     /* the read-write lock structure */
  298. typedef struct pth_rwlock_st pth_rwlock_t;
  299. struct pth_rwlock_st { /* not hidden to avoid destructor */
  300.     int            rw_state;
  301.     unsigned int   rw_mode;
  302.     unsigned long  rw_readers;
  303.     pth_mutex_t    rw_mutex_rd;
  304.     pth_mutex_t    rw_mutex_rw;
  305. };
  306.  
  307.     /* the condition variable structure */
  308. typedef struct pth_cond_st pth_cond_t;
  309. struct pth_cond_st { /* not hidden to avoid destructor */
  310.     unsigned long cn_state;
  311.     unsigned int  cn_waiters;
  312. };
  313.  
  314.     /* the barrier variable structure */
  315. typedef struct pth_barrier_st pth_barrier_t;
  316. struct pth_barrier_st { /* not hidden to avoid destructor */
  317.     unsigned long br_state;
  318.     int           br_threshold;
  319.     int           br_count;
  320.     int           br_cycle;
  321.     pth_cond_t    br_cond;
  322.     pth_mutex_t   br_mutex;
  323. };
  324.  
  325.     /* the user-space context structure */
  326. typedef struct pth_uctx_st *pth_uctx_t;
  327. struct pth_uctx_st;
  328.  
  329.     /* filedescriptor blocking modes */
  330. enum {
  331.     PTH_FDMODE_ERROR = -1,
  332.     PTH_FDMODE_POLL  =  0,
  333.     PTH_FDMODE_BLOCK,
  334.     PTH_FDMODE_NONBLOCK
  335. };
  336.  
  337.     /* optionally fake poll(2) data structure and options */
  338. #ifndef _PTHREAD_PRIVATE
  339. #define PTH_FAKE_POLL 0
  340. #if !(PTH_FAKE_POLL)
  341. /* use vendor poll(2) environment */
  342. #ifndef _XOPEN_SOURCE
  343. #define _XOPEN_SOURCE
  344. #define _XOPEN_SOURCE_set
  345. #endif
  346. #include <poll.h>
  347. #ifdef _XOPEN_SOURCE_set
  348. #undef _XOPEN_SOURCE_set
  349. #undef _XOPEN_SOURCE
  350. #endif
  351. #ifndef POLLRDNORM
  352. #define POLLRDNORM POLLIN
  353. #endif
  354. #ifndef POLLRDBAND
  355. #define POLLRDBAND POLLIN
  356. #endif
  357. #ifndef POLLWRNORM
  358. #define POLLWRNORM POLLOUT
  359. #endif
  360. #ifndef POLLWRBAND
  361. #define POLLWRBAND POLLOUT
  362. #endif
  363. #ifndef INFTIM
  364. #define INFTIM (-1)
  365. #endif
  366. #else
  367. /* fake a poll(2) environment */
  368. #define POLLIN      0x0001      /* any readable data available   */
  369. #define POLLPRI     0x0002      /* OOB/Urgent readable data      */
  370. #define POLLOUT     0x0004      /* file descriptor is writeable  */
  371. #define POLLERR     0x0008      /* some poll error occurred      */
  372. #define POLLHUP     0x0010      /* file descriptor was "hung up" */
  373. #define POLLNVAL    0x0020      /* requested events "invalid"    */
  374. #define POLLRDNORM  POLLIN
  375. #define POLLRDBAND  POLLIN
  376. #define POLLWRNORM  POLLOUT
  377. #define POLLWRBAND  POLLOUT
  378. #ifndef INFTIM
  379. #define INFTIM      (-1)        /* poll infinite */
  380. #endif
  381. struct pollfd {
  382.     int fd;                     /* which file descriptor to poll */
  383.     short events;               /* events we are interested in   */
  384.     short revents;              /* events found on return        */
  385. };
  386. #endif
  387. #endif /* !_PTHREAD_PRIVATE */
  388.  
  389.     /* optionally fake readv(2)/writev(2) data structure and options */
  390. #ifndef _PTHREAD_PRIVATE
  391. #define PTH_FAKE_RWV 0
  392. #if !(PTH_FAKE_RWV)
  393. /* use vendor readv(2)/writev(2) environment */
  394. #include <sys/uio.h>
  395. #ifndef UIO_MAXIOV
  396. #define UIO_MAXIOV 1024
  397. #endif
  398. #else
  399. /* fake a readv(2)/writev(2) environment */
  400. struct iovec {
  401.     void  *iov_base;  /* memory base address */
  402.     size_t iov_len;   /* memory chunk length */
  403. };
  404. #ifndef UIO_MAXIOV
  405. #define UIO_MAXIOV 1024
  406. #endif
  407. #endif
  408. #endif /* !_PTHREAD_PRIVATE */
  409.  
  410.     /* extension support */
  411. #define PTH_EXT_SFIO 0
  412.  
  413.     /* Sfio extension support */
  414. #if 0
  415. #include <sfio.h>
  416. #else
  417. typedef void *Sfdisc_t;
  418. #endif
  419.  
  420.     /* global functions */
  421. extern int            pth_init(void);
  422. extern int            pth_kill(void);
  423. extern long           pth_ctrl(unsigned long, ...);
  424. extern long           pth_version(void);
  425.  
  426.     /* thread attribute functions */
  427. extern pth_attr_t     pth_attr_of(pth_t);
  428. extern pth_attr_t     pth_attr_new(void);
  429. extern int            pth_attr_init(pth_attr_t);
  430. extern int            pth_attr_set(pth_attr_t, int, ...);
  431. extern int            pth_attr_get(pth_attr_t, int, ...);
  432. extern int            pth_attr_destroy(pth_attr_t);
  433.  
  434.     /* thread functions */
  435. extern pth_t          pth_spawn(pth_attr_t, void *(*)(void *), void *);
  436. extern int            pth_once(pth_once_t *, void (*)(void *), void *);
  437. extern pth_t          pth_self(void);
  438. extern int            pth_suspend(pth_t);
  439. extern int            pth_resume(pth_t);
  440. extern int            pth_yield(pth_t);
  441. extern int            pth_nap(pth_time_t);
  442. extern int            pth_wait(pth_event_t);
  443. extern int            pth_cancel(pth_t);
  444. extern int            pth_abort(pth_t);
  445. extern int            pth_raise(pth_t, int);
  446. extern int            pth_join(pth_t, void **);
  447. extern void           pth_exit(void *);
  448.  
  449.     /* utility functions */
  450. extern int            pth_fdmode(int, int);
  451. extern pth_time_t     pth_time(long, long);
  452. extern pth_time_t     pth_timeout(long, long);
  453.  
  454.     /* cancellation functions */
  455. extern void           pth_cancel_state(int, int *);
  456. extern void           pth_cancel_point(void);
  457.  
  458.     /* event functions */
  459. extern pth_event_t    pth_event(unsigned long, ...);
  460. extern unsigned long  pth_event_typeof(pth_event_t);
  461. extern int            pth_event_extract(pth_event_t ev, ...);
  462. extern pth_event_t    pth_event_concat(pth_event_t, ...);
  463. extern pth_event_t    pth_event_isolate(pth_event_t);
  464. extern pth_event_t    pth_event_walk(pth_event_t, unsigned int);
  465. extern pth_status_t   pth_event_status(pth_event_t);
  466. extern int            pth_event_free(pth_event_t, int);
  467.  
  468.     /* key-based storage functions */
  469. extern int            pth_key_create(pth_key_t *, void (*)(void *));
  470. extern int            pth_key_delete(pth_key_t);
  471. extern int            pth_key_setdata(pth_key_t, const void *);
  472. extern void          *pth_key_getdata(pth_key_t);
  473.  
  474.     /* message port functions */
  475. extern pth_msgport_t  pth_msgport_create(const char *);
  476. extern void           pth_msgport_destroy(pth_msgport_t);
  477. extern pth_msgport_t  pth_msgport_find(const char *);
  478. extern int            pth_msgport_pending(pth_msgport_t);
  479. extern int            pth_msgport_put(pth_msgport_t, pth_message_t *);
  480. extern pth_message_t *pth_msgport_get(pth_msgport_t);
  481. extern int            pth_msgport_reply(pth_message_t *);
  482.  
  483.     /* cleanup handler functions */
  484. extern int            pth_cleanup_push(void (*)(void *), void *);
  485. extern int            pth_cleanup_pop(int);
  486.  
  487.     /* process forking functions */
  488. extern int            pth_atfork_push(void (*)(void *), void (*)(void *), void (*)(void *), void *);
  489. extern int            pth_atfork_pop(void);
  490. extern pid_t          pth_fork(void);
  491.  
  492.     /* synchronization functions */
  493. extern int            pth_mutex_init(pth_mutex_t *);
  494. extern int            pth_mutex_acquire(pth_mutex_t *, int, pth_event_t);
  495. extern int            pth_mutex_release(pth_mutex_t *);
  496. extern int            pth_rwlock_init(pth_rwlock_t *);
  497. extern int            pth_rwlock_acquire(pth_rwlock_t *, int, int, pth_event_t);
  498. extern int            pth_rwlock_release(pth_rwlock_t *);
  499. extern int            pth_cond_init(pth_cond_t *);
  500. extern int            pth_cond_await(pth_cond_t *, pth_mutex_t *, pth_event_t);
  501. extern int            pth_cond_notify(pth_cond_t *, int);
  502. extern int            pth_barrier_init(pth_barrier_t *, int);
  503. extern int            pth_barrier_reach(pth_barrier_t *);
  504.  
  505.     /* user-space context functions */
  506. extern int            pth_uctx_create(pth_uctx_t *);
  507. extern int            pth_uctx_make(pth_uctx_t, char *, size_t, const sigset_t *, void (*)(void *), void *, pth_uctx_t);
  508. extern int            pth_uctx_switch(pth_uctx_t, pth_uctx_t);
  509. extern int            pth_uctx_destroy(pth_uctx_t);
  510.  
  511.     /* extension functions */
  512. extern Sfdisc_t      *pth_sfiodisc(void);
  513.  
  514.     /* generalized variants of replacement functions */
  515. extern int            pth_sigwait_ev(const sigset_t *, int *, pth_event_t);
  516. extern int            pth_connect_ev(int, const struct sockaddr *, socklen_t, pth_event_t);
  517. extern int            pth_accept_ev(int, struct sockaddr *, socklen_t *, pth_event_t);
  518. extern int            pth_select_ev(int, fd_set *, fd_set *, fd_set *, struct timeval *, pth_event_t);
  519. extern int            pth_poll_ev(struct pollfd *, nfds_t, int, pth_event_t);
  520. extern ssize_t        pth_read_ev(int, void *, size_t, pth_event_t);
  521. extern ssize_t        pth_write_ev(int, const void *, size_t, pth_event_t);
  522. extern ssize_t        pth_readv_ev(int, const struct iovec *, int, pth_event_t);
  523. extern ssize_t        pth_writev_ev(int, const struct iovec *, int, pth_event_t);
  524. extern ssize_t        pth_recv_ev(int, void *, size_t, int, pth_event_t);
  525. extern ssize_t        pth_send_ev(int, const void *, size_t, int, pth_event_t);
  526. extern ssize_t        pth_recvfrom_ev(int, void *, size_t, int, struct sockaddr *, socklen_t *, pth_event_t);
  527. extern ssize_t        pth_sendto_ev(int, const void *, size_t, int, const struct sockaddr *, socklen_t, pth_event_t);
  528.  
  529.     /* standard replacement functions */
  530. extern int            pth_nanosleep(const struct timespec *, struct timespec *);
  531. extern int            pth_usleep(unsigned int);
  532. extern unsigned int   pth_sleep(unsigned int);
  533. extern pid_t          pth_waitpid(pid_t, int *, int);
  534. extern int            pth_system(const char *);
  535. extern int            pth_sigmask(int, const sigset_t *, sigset_t *);
  536. extern int            pth_sigwait(const sigset_t *, int *);
  537. extern int            pth_connect(int, const struct sockaddr *, socklen_t);
  538. extern int            pth_accept(int, struct sockaddr *, socklen_t *);
  539. extern int            pth_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
  540. extern int            pth_pselect(int, fd_set *, fd_set *, fd_set *, const struct timespec *, const sigset_t *);
  541. extern int            pth_poll(struct pollfd *, nfds_t, int);
  542. extern ssize_t        pth_read(int, void *, size_t);
  543. extern ssize_t        pth_write(int, const void *, size_t);
  544. extern ssize_t        pth_readv(int, const struct iovec *, int);
  545. extern ssize_t        pth_writev(int, const struct iovec *, int);
  546. extern ssize_t        pth_recv(int, void *, size_t, int);
  547. extern ssize_t        pth_send(int, const void *, size_t, int);
  548. extern ssize_t        pth_recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *);
  549. extern ssize_t        pth_sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t);
  550. extern ssize_t        pth_pread(int, void *, size_t, off_t);
  551. extern ssize_t        pth_pwrite(int, const void *, size_t, off_t);
  552.  
  553. END_DECLARATION
  554.  
  555.     /* soft system call mapping support */
  556. #if PTH_SYSCALL_SOFT && !defined(_PTH_PRIVATE)
  557. #define fork          pth_fork
  558. #define waitpid       pth_waitpid
  559. #define system        pth_system
  560. #define nanosleep     pth_nanosleep
  561. #define usleep        pth_usleep
  562. #define sleep         pth_sleep
  563. #define sigprocmask   pth_sigmask
  564. #define sigwait       pth_sigwait
  565. #define select        pth_select
  566. #define pselect       pth_pselect
  567. #define poll          pth_poll
  568. #define connect       pth_connect
  569. #define accept        pth_accept
  570. #define read          pth_read
  571. #define write         pth_write
  572. #define readv         pth_readv
  573. #define writev        pth_writev
  574. #define recv          pth_recv
  575. #define send          pth_send
  576. #define recvfrom      pth_recvfrom
  577. #define sendto        pth_sendto
  578. #define pread         pth_pread
  579. #define pwrite        pth_pwrite
  580. #endif
  581.  
  582.     /* backward compatibility (Pth < 1.5.0) */
  583. #define pth_event_occurred(ev) \
  584.     (   pth_event_status(ev) == PTH_STATUS_OCCURRED \
  585.      || pth_event_status(ev) == PTH_STATUS_FAILED   )
  586.  
  587. #endif /* _PTH_H_ */
  588.  
  589.